package com.chinamsp.codegen.convert;

import java.io.File;
import java.io.IOException;
import java.util.Map;

import org.apache.commons.lang.StringUtils;
import org.aspectj.util.FileUtil;
import org.springframework.util.Assert;

import com.chinamsp.codegen.util.TemplateUtils;

/**
 * 上下文
 * @author shifenghu
 *
 */

public class CodeGenContext {
	
	
	/**
	 * 目录
	 */
	private File directory;
	
	
	public CodeGenContext(String absolutePath) {
		directory = new File(absolutePath);
		// 检查读写权限
		Assert.isTrue(directory.canRead(), String.format("$%s 没有读取权限", absolutePath));
		Assert.isTrue(directory.canWrite(), String.format("$%s 没有写入权限", absolutePath));
	}
	
	
	/**
	 * 生成一个文件
	 * @param filePath
	 * @param context
	 * @return
	 * @throws IOException 
	 */
	public File build(String filePath, String template, Map<String, Object> context) throws IOException {
		return build(null, filePath, template, context);
	}
	
	/**
	 * 根据  dir 创建 文件
	 * @param dir
	 * @param filePath
	 * @param template
	 * @param context
	 * @return
	 * @throws IOException
	 */
	public File build(String dir, String filePath, String template, Map<String, Object> context) throws IOException {
		File file = new File(directory, StringUtils.isBlank(dir) ? filePath : dir + File.separator + filePath);
		file.getParentFile().mkdirs();
		// 开始生成新的文件
		file.createNewFile();
		// 生成内容并输出
		FileUtil.writeAsString(file, TemplateUtils.render(template, context));
		return file;
	}
	
}
